package com.hdu.utils;

import java.nio.ByteBuffer;

public class SplitUtils {


    public static void main(String[] args) {
        ByteBuffer source = ByteBuffer.allocate(32);
        source.put("Hello,world\nI'm zhangsan\nHo".getBytes());
        split(source);
        source.put("w are you\n".getBytes());
        split(source);
    }

    public static void split(ByteBuffer source) {
        source.flip();
        for (int i = 0; i < source.limit(); i++) {
            if (source.get(i) == '\n') {
                // 找到一条完整消息, 存入新的 byteBuffer
                int size = i + 1 - source.position();
                ByteBuffer target = ByteBuffer.allocate(size);
                for (int j = 0; j < size; j++) {
                    target.put(source.get());
                }
                ByteBufferUtil.debugAll(target);
            }
        }
        // 剩下的内容压缩到前面 和下面的内容组成一条完整的消息
        // 注意 如果没有拆出一条完整的消息 那么剩下的内容压缩到前面 此时造成的结果就是 position == limit
        // 所以说可以通过 position == limit 判断有没有拆出一条完整的消息
        source.compact();
    }

}
